package com.demo.generic;

/**
 * @author linchong
 * @version 1.0
 * @Date: 2022-05-11 7:40
 * @Description: GenericClassDemo$
 */
public class GenericClassDemo<T> {

	//member成员变量类型T，由外部指定
	private T member;

	public GenericClassDemo(T member){
		this.member = member;
	}
	public T handleSomething(T target){
		return target;
	}

	//只有声明了泛型标识符的方法才是泛型方法，handleSomething不是泛型方法，它只是一个普通的成员方法
	public static <E> void printArray(E[] inputArray){
		for (E element : inputArray) {
			System.out.printf("%s",element);
			System.out.printf(" ");
		}
		System.out.println();
	}

	//泛型方法的定义时，可以是和泛型类相同的字母，但是实际执行中确可以传入同泛型类型不同的实参
	//泛型方法是独立于泛型泛型类存在的，而泛型类中的其他方法是受制于泛型标识符的
	public static <T> void printArray2(T[] inputArray){
		for (T element : inputArray) {
			System.out.printf("%s",element);
			System.out.printf(" ");
		}
		System.out.println();
	}

	public T getMember() {
		return member;
	}

	public void setMember(T member) {
		this.member = member;
	}

	public void normalMethod(String name){
		System.out.println("invoke normal method,say "+name);
	}
}
